package co.saen.nextincloud.beans;

import co.saen.nextincloud.dao.UsersDAO;
import co.saen.nextincloud.model.Users;
import java.io.Serializable;
import java.util.Date;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.servlet.http.HttpServletRequest;
import org.primefaces.context.RequestContext;

/**
 *
 * @author Felipe Rolvar
 */
@ManagedBean(name = "loginBean")
@SessionScoped
public class LoginBean implements Serializable{

    private Users usuario;
    Date usrLogin = new Date();

    public LoginBean() {
    }

    public void login(ActionEvent actionEvent) {
        RequestContext context = RequestContext.getCurrentInstance();
        FacesMessage msg = null;
        boolean loggedIn = false;

        UsersDAO usuariodao = new UsersDAO();
        usuario = usuariodao.searchByUser(usuario);


        if (usuario != null) {
            if (usuario.isUsrActv() == false) {
                loggedIn = false;
                msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "El Usuario se encuentra Inactivo", "Póngase en contacto con el Administrador del sistema");
            } else {
                loggedIn = true;
                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Bienvenido " + usuario.getUsrName(), null);
                usuario.setUsrLastLogin(usrLogin);
                usuariodao.updateUser(usuario);
                getRequest().getSession().setAttribute("User", usuario);
            }
        } else {
            loggedIn = false;
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Error de Inicio de Sesión", "Usuario y/o contraseña inválidos");
        }

        FacesContext.getCurrentInstance().addMessage(null, msg);
        context.addCallbackParam("loggedIn", loggedIn);
    }

    public void logout() {
        FacesMessage msg = null;
        try {
            getRequest().getSession().invalidate();
            FacesContext.getCurrentInstance().getExternalContext().redirect("/nextincloud/login.rolvar");
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", e.getMessage());
        }
    }

    public void redirectLogin() {
        FacesMessage msg = null;
        try {
            getRequest().getSession().invalidate();
            FacesContext.getCurrentInstance().getExternalContext().redirect("/nextincloud/login.rolvar");
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", e.getMessage());
        }
    }

    public Users getUsuario() {
        if (usuario == null) {
            usuario = new Users();
        }
        return usuario;
    }

    public void setUsuario(Users usuario) {
        this.usuario = usuario;
    }

    public static HttpServletRequest getRequest() {
        return (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
    }

}